Large-scale, network-based computing represents a paradigm shift from traditional client-server computing relationships. With large-scale, network-based computing platforms (e.g., data centers), customers are able to leverage shared resources on-demand by renting resources that are owned by third parties and that reside “in the cloud.” With these resources, customers of the platform are able to launch and maintain large applications without actually owning or servicing the underlying infrastructure necessary for these applications. As such, network-accessible computing platforms, often referred to as “cloud-computing platforms' or “cloud-computing environments,” have expanded the class of individuals and companies able to effectively compete in the realm of computing applications.
The cloud-computing environments are generally made up of multiple computing devices that each generally includes one or more central processing units (CPU) or processors. Symmetric multithreading, also referred to as hyperthreading, allows sharing of CPU processing cores' resources across multiple hardware threads. Hyperthreading operates by allowing two or more execution contexts (CPU registers, enhanced instruction pointer (EIP), stack pointer, etc.) to share the use of a CPU processing cores' resources including load/store ports, arithmetic logic units (ALU), processor cache, and memory bandwidth access. Since most instruction streams have significant delays due to memory fetch activities, hyperthreading allows a CPU core's compute resources to be leveraged more effectively.
While hyperthreading offers a great way for sharing CPU processing cores across multiple threads, the performance impact of one hyperthread on another can be undesirable in many cases, particularly in instances where deriving consistent performance out of a hardware thread is highly desirable. Consistency of hyperthreading performance can be critical for usage in cloud-computing environments, particularly when a product model requires hyperthreads of any single processing core to be used by multiple virtual machines.